class Solution:
    """
    字符串压缩。利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。
    比如，字符串`aabcccccaaa`会变为`a2b1c5a3`。
    若“压缩”后的字符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字母（a至z）。
    """

    def compressString(self, S: str) -> str:
        # result = ""
        res = []
        if len(S) <= 2:
            return S
        num = 1
        for i in range(len(S)):
            # 若下一个字符和当前字符相同，并且记录当前字符。
            if i == len(S) - 1:
                # result += S[i] + str(num)
                res.append(S[i] + str(num))
                res = "".join(res)
                return res if len(res) < len(S) else S
            if S[i] == S[i + 1]:
                num += 1
            # 若下一个字符和当前字符不同
            else:
                # result = result + S[i] + str(num)
                res.append(S[i] + str(num))
                num = 1

        return res

    def compressString2(self, S: str) -> str:
        if not S:
            return ''
        i, j, ls = 0, 0, len(S)
        res = []
        # 「外层循环」i 指向每个首次出现的字符
        while i < ls:
            # 「内层循环」j 向前遍历，直到字符串末尾或找到与 s[i] 不同的字符时跳出
            while j < ls and S[i] == S[j]:
                j += 1
            # 压缩字符串，添加至 res
            res.append(S[i])
            res.append(str(j - i))
            # 令 i 指向下一个首次出现的字符
            i = j
        # 将列表拼接为字符串
        res = ''.join(res)
        # 对比「压缩字符串」和「原字符串」长度，返回较短的
        return res if len(res) < ls else S



if __name__ == '__main__':
    print(len("FRkmmmdddiicZZZFFCCGGGCCCkkHHHrdZsSmmmIIIHHHIzzzUzcTzzzttMMrDDdddDDKKK"))
    print(len("FRk1m3d3i2c1Z3F2C2G3C3k2H3r1d1Z1s1S1m3I3H3I1z3U1z1cT1z3t2M2r1D2d3D2K3"))
    test = "123"
    print(test[0])
    print(test[1])
    test2 = test + "2"
    print(test2)
    test2 = test2[0:3]
    # print(test2[0:3])
    print(test2)
    solution = Solution()
    # print(solution.compressString2("FRkmmmdddiicZZZFFCCGGGCCCkkHHHrdZsSmmmIIIHHHIzzzUzcTzzzttMMrDDdddDDKKK"))
    print(solution.compressString(None))
